home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / util2 / pgp22src.zip / APPNOTE.DOC next >
Text File  |  1993-03-07  |  7KB  |  158 lines

  1.           PGP 2.2 Application Note:  Integrating PGP with mailers
  2.                     Derek Atkins <warlord@MIT.EDU>
  3.                              6-Mar-93
  4.  
  5.     This document will try to describe how to create an
  6. application around PGP version 2.2, in order to incorporate PGP into
  7. mailers and news readers.  There are a number of changes in 2.2 which
  8. make it easier to write wrappers for PGP.  In writing this, I may have
  9. inadvertantly left out some functionality, some mailers, or some
  10. machine types.  I should warn readers now that I am a UNIX person, and
  11. that most of this document will probably be in UNIX terms.
  12.  
  13.     This document references scripts which are in the contrib
  14. directory of PGP.  Within the contrib area are scripts contributed to
  15. the release.  A lot of these scripts were written for PGP 2.1, so they
  16. do not handle multiple recipients, or some of the new PGP features.
  17.  
  18.     The first thing to remember is that PGP usually needs to have
  19. a controlling TTY in order to gather information, like the password,
  20. or for the user to answer questions, like to whether to add or sign
  21. keys.  This is useful for text-based mail agents.  In fact, it is most
  22. useful for agents which use files for messages, like MH.
  23.  
  24.     One example for this is in the emacs directory.  The e-lisp
  25. pgp.el1 winds up saving the buffer to encrypt or decrypt to a file,
  26. and then runs pgp on that file using the emacs interactive mode.  It
  27. looks the same as if you type "pgp filename" at the shell.
  28.  
  29.     However, this is not very interesting.  While it is easy to to
  30. this, it means that there are extra files being created on the disk.
  31. This can be a security risk, since wiping files off disk is not always
  32. successful, and by having the plain-text go to a file means more time
  33. for a possible attacker to get ahold of the plain-text of the message.
  34. A better way to accomplish this is to use filter_mode, which is the -f
  35. option.  This tells PGP to read the message from stdin, and to put the
  36. output onto stdout.  Unfortunately, in this manner, the signature
  37. information is output onto stderr, so you will either lose it, or it
  38. and all other PGP output will be put in the same stream with the
  39. message, but this depends on your piping ability.
  40.  
  41.     An example of how to use this is the mailx script.  This
  42. script is supposed to run in place of the UNIX /bin/mail program.  It
  43. reads from stdin and will do the proper encryption and then execute
  44. /bin/mail.  This works by specifying a special user for the recipient
  45. to encrypt and signature.  This works by calling PGP with the
  46. following arguments, and uses stdin and stdout for the mail input and
  47. output.  However, this script only is useful for sending mail, not
  48. reading it.
  49.  
  50.  To just sign the message, in clear-text mode:
  51.     pgp -fast +clearsig=on 
  52.  or to sign and encrypt:
  53.     pgp -feast user1 user2 user3...
  54.  
  55.     This works well when dealing with a command-line mailer, or a
  56. mailer that is run in a terminal.  There are problems, however, if you
  57. do not have a TTY in which to get a password to decrypt or sign
  58. messages.  I'm not sure of a way around this, but then again, PEM is
  59. going to have this same problem.  (An example that I can think of is
  60. integrating with xmh).
  61.  
  62.     There is a way around this, however, in some cases.  One way,
  63. which is not recommended, but can be used, is to use the "-z" option
  64. to set the passphrase.  Again, this is *NOT* recommended, since some
  65. operating systems will not allow the program to erase the process
  66. table, and someone can retreive the pass phrase from there.  A similar
  67. way to get the pass phrase in is to use the PGPPASS environment
  68. variable.  Again, this has the same problems.  An example of this
  69. usage is:
  70.  
  71.     pgp -sat +clearsig=on -z "This is my pass phrase" inputfile
  72.  
  73.     There is a better way of doing this in PGP 2.2, which is an
  74. environment variable called "PGPPASSFD".  If this is set, it means
  75. that the FIRST thing PGP will do is read the pass phrase from this
  76. file descriptor.  So, for example, one can set PGPPASSFD to "0"
  77. (zero), and then PGP will read the pass phrase from stdin as the first
  78. thing.  
  79.  
  80.     For example, an emacs utility could grab the block to be
  81. encrypted (or decrypted), ask the user for the pass phrase in the
  82. mini-buffer, and then do the equivalent of this shell script, using
  83. something like:
  84.  
  85.     (send-string PROCESS "PassPhrase") 
  86.     (send-region PROCESS (point-min) (point-max))
  87.  
  88. ---begin---
  89. #!/bin/sh
  90.  
  91. PGPPASSFD=0;export PGPPASSFD
  92.  
  93. (echo "PassPhraseHere"; cat ) | pgp -feast recipient1 recipient2...
  94. ---end---
  95.  
  96.     I must admit, this is a crude script, since it doesn't strip
  97. out stderr, which included the bannerlines and error messages, but
  98. that is not difficult to do out of band.
  99.  
  100. This is an example perl script that demonstrates the use of PGPPASSFD:
  101.  
  102. ---begin---
  103. #!/usr/local/bin/perl
  104. #
  105. # perl example for PGPPASSFD,
  106. # encrypts stream with password 'test'
  107. #
  108.  
  109. pipe(READER,WRITER);
  110.  
  111. if (!fork) {
  112.     close(WRITER);
  113.     $ENV{'PGPPASSFD'}=fileno(READER);
  114. # the $^F (Ctrl-F) variable controls close-on-exec of files
  115.     $=fileno(READER);
  116.     exec "pgp -acf";
  117.     die "can't exec pgp\n";
  118. }
  119. close(READER);
  120. syswrite(WRITER, "test\n", 5);
  121. close(WRITER);
  122. wait
  123. ---end---
  124.  
  125.     Another feature of 2.2 which can be utilized in mailer scripts
  126. is the batchmode feature.  This is used in the key-server software
  127. (see key-server.doc), which is not included in the release to allow a
  128. process to call PGP, and have it perform without prompting the user
  129. for anything.  It will take the default answer to most questions,
  130. which may not be what the user wants.  This is switched by adding
  131. "+batchmode" to the command line.
  132.  
  133.     One more mailer I should mention, and this is probably the
  134. most important of all of them, is MIME compatibility.  In order to use
  135. MIME, a user needs to create a proper entry for PGP.  Unfortunately
  136. there hasn't, yet, been a standard MIME content-type created.  One
  137. possible mailcap entry would be:
  138.  
  139.     application/x-pgp:    cat %s | pgp -f
  140.  
  141. although there are a lot of possibilities.  There is another
  142. suggestion given in the mime directory in the contrib area, which I
  143. haven't tested.
  144.  
  145.     I hope that this document has helped people understand some of
  146. the work being done to integrate PGP with mailers.  There is some work
  147. going on already to integrate it even more.  If you have a mailer for
  148. which there is no PGP handler, and you want to write one, please let
  149. me know, so that we don't duplicate work.  In addition, if you have
  150. written a mailer application, and its not included here in the
  151. release, again let me know.
  152.  
  153.     A second contact for this is Colin Plumb <colin@nyx.cs.du.edu>.
  154.  
  155.     Have fun!
  156.  
  157. -derek        <warlord@MIT.EDU>
  158.